/*
	检测函数
*/
function regular(e){
	var _r = new Object();
	_r['username'] = {msg:'用户名格式不正确',reg:/^(.){4,20}$/};
	_r['email'] = {msg:'邮箱格式不正确',reg:/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/};
	_r['password'] = {msg:'密码格式不正确',reg:/^(.){6,20}$/};
	return _r[e];
}
function userName(o){ //验证用户名
	var o = $(o);
	var pattern = /^(.){4,20}$/;
	if (!pattern.test(o.value)){
		var css = "error";
		var msg = '用户名必须是4-20位字符';
		controlStyle(o.id,css,msg);
		return false;
	}	
}
function passConfirm(o,tag){ //验证确认密码
	var o = $(o);
	if(o.value != $(tag).value){
		var css = 'error';
		var msg = '两次输入的密码不一致';
		controlStyle(o.id,css,msg);
		return false;		
	}
}
function none(o,msg){ //不能为空
	var o = $(o);
	if(o.value == ''){
		var css = 'error';
		if(msg == null) msg = '不能为空';
		controlStyle(o.id,css,msg);
		return false;
	}
}
function multiple(name,_min,_max,min_msg,max_msg){ //多选限制最少和最多选择数量
	var css = 'error';
	var checkbox = document.getElementsByName(name);
	var num = 0;
	for(var i=0; i<checkbox.length; i++){
		if(checkbox[i].checked) num++;
	}
	if(num<_min){
		controlStyle(name,css,min_msg);
		return false;
	}
	if(num>_max){
		controlStyle(name,css,max_msg);
		return false;
	}
}
function single(name,msg){
	var flag = false;
	var css = 'error';
	var radio = document.getElementsByName(name);
	for(var i=0; i<radio.length; i++){
		if(radio[i].checked) flag = true;
	}
	controlStyle(name,css,msg);
	return flag;
}
/*
	执行函数
*/
function warning(o,msg){
	var css = 'warning';
	if(!msg) msg = '&nbsp;';
	controlStyle(o.id,css,msg);
}
function detect(o,msg){
	var css = "success";
	if(!msg) msg = '&nbsp;';
	var reg = eval("["+o.test.replace(/\(/g,"['").replace(/\)/g,"']")+"]");
	for(var i=0; i<reg.length; i++){
		if(/\:+/gi.test(reg[i])){ //如果包含":"为函数，否则为表达式
			var fun = String(reg[i]).split(":");
			var funName = fun[0];
			var funValue = fun[1].split(",");
			var temp = "";
			for(var n=0; n<funValue.length; n++){
				temp += "'"+funValue[n]+"'";
				if(n<funValue.length-1) temp += ",";
			}
			funValue = temp;
			fun = eval(funName+'('+funValue+')');
			if(fun == false) return false;
		}else{			
			var pattern = regular(reg[i]);
			if(!pattern['reg'].test(o.value) || o.value==''){
				css = "error";
				msg = pattern['msg'];
				controlStyle(o.id,css,msg);
				return false;
			}
		}
	}
	var tagName = o.id=='' ? o.name : o.id;
	controlStyle(tagName,css,msg);
	return true;
}
function controlStyle(id,css,text){
	if($(id) != null) $(id).className = $(id).className.split("_")[0]+"_"+css;
	if(css!='warning' || $(id + '_msg').className=='') $(id + '_msg').innerHTML = text;
	$(id + '_msg').className = "msg_"+css;
	if($(id) != null) $(id).onkeydown = function(){ $(id + '_msg').innerHTML = text; }
}
function check(o){
	var els = o.elements;
	for(var i=0; i<els.length; i++){
		if(els[i].test && !detect(els[i])){
			var type = els[i].type;
			if(type == 'text' || type == 'password')els[i].select();
			return false;
		}
	}
}